package com.joker.demo.core.scheduler;


import com.joker.demo.core.domain.bo.JobRegistryBO;
import com.joker.demo.core.domain.dto.TaskExecuteRequestDTO;
import com.joker.demo.core.domain.dto.TaskExecuteResponseDTO;
import com.joker.demo.core.domain.dto.ThreadPoolMonitorDTO;
import com.joker.demo.core.domain.dto.EnvironmentMonitorDTO;

/**
 * 任务调度器服务类
 *
 * @author : feixiang.li
 * @since : 2025-07-24 18:18
 */
public interface JobSchedulerHandlerService {


    /**
     * 注册任务处理器
     *
     * @param jobRegistryBo 任务注册信息
     * @return 注册
     */
    Boolean registerJobHandlers(JobRegistryBO jobRegistryBo);


    /**
     * 当服务下线的时候，需要删除任务处理器
     *
     * @param registerKey 应用名称
     * @return 删除
     */
    Boolean unregisterJobHandlers(String registerKey);


    /**
     * 调度器发送 任务执行的请求EXECUTE_TASK。将任务更新成请求发送中。
     *
     * @param taskExecuteResponse 响应结果
     */
    void sendExecuteTask(TaskExecuteRequestDTO taskExecuteResponse);

    /**
     * 调度器接收到EXECUTE_TASK_RESPONSE 请求，将任务变成 运行中
     *
     * @param taskExecuteResponse 任务执行结果
     */
    void execute(TaskExecuteResponseDTO taskExecuteResponse);


    /**
     * 执行器发送TASK_RESULT请求，将任务变成3种状态（运行失败/运行成功/运行超时）.
     *
     * @param taskExecuteResponse 任务执行结果
     */
    void receiveExecuteTaskResponse(TaskExecuteResponseDTO taskExecuteResponse);


    /**
     * 发送任务取消请求到执行器
     * 手动终止，调度器发送CANCEL_TASK 请求。（立即将状态变更成运行取消中)
     */
    void sendCancelTask(TaskExecuteResponseDTO taskExecuteResponse);


    /**
     * 当任务执行器接收到任务取消 CANCEL_TASK_RESPONSE。
     * 将任务状态变更成 取消成功
     */
    void cancel(TaskExecuteResponseDTO taskExecuteResponse);

    /**
     * 处理线程池监控数据
     * 将监控数据存储到数据库中，并更新执行器状态
     *
     * @param monitorData 线程池监控数据
     */
    void processThreadPoolMonitorData(ThreadPoolMonitorDTO monitorData);

    /**
     * 处理环境监控数据
     * 将环境监控数据存储到数据库中，包括系统、JVM、磁盘、网络等信息
     *
     * @param monitorData 环境监控数据
     */
    void processEnvironmentMonitorData(EnvironmentMonitorDTO monitorData);

}
